
#include<unistd.h>
#include<iostream>
#include"../logs/mylog.h"


void ManageExample()
{
  //获取名称为async的日志器
  mylog::Logger::ptr logger = mylog::LoggerManager::getInstance().getLogger("async");

  //输出
  logger->debug("%s","测试");
  logger->info("%s","测试");
  logger->warn("%s","测试");
  logger->error("%s","测试");
  logger->fatal("%s","测试");


  int count = 0;
  std::string tmp = "测试";
  size_t size = 0;
  while(count < 300000)
  {
    logger->fatal("%s%c%d",tmp.c_str(),'-',count);
    count++;
  }
}
void RootExample()
{
  //大写为默认日志器，落地方式为StdoutSink
  DEBUG("%s","测试");
  INOF("%s","测试");
  WARN("%s","测试");
  ERROR("%s","测试");
  FATAL("%s","测试");
  int count = 0;
  std::string tmp = "测试";
  size_t size = 0;
  while(count < 300000)
  {
    FATAL("%s%c%d",tmp.c_str(),'-',count);
    count++;
  }
}
void example()
{
  std::unique_ptr<mylog::LoggerBuilder> build(new mylog::GloubLoggerBuilder());
  //设置日志器名称，可以通过LoggerManager获取对应名称的日志器
  build->BuildLoggerName("async");
  //设置输出的格式
  build->BuildLoggerFormat("[%c][%f:%l]%m%n");
  //设置日志级别
  build->BuildLoggerLevel(mylog::LogLevel::value::ERROR);
  //设置模式。同步和异步
  build->BuildLoggerType(mylog::LoggerType::LOGGER_ASYNC);
  //异步日志可选，安全模式缓冲区固定，非安全模式缓冲区会自动扩容
  //build->BuildEnableUnsafeAsync();
  //设置落地方式，不设置默认基本输出
  //有三种落地方式，基本输出，固定文件，滚动文件(按大小切换文件)和扩展了一个滚动时间(按时间切换文件)
  build->BuildLoggerSink<mylog::StdoutSink>();
  build->BuildLoggerSink<mylog::FileSink>("./log/a.log");
  //生成日志器
  build->Build();

  ManageExample();
  RootExample();

}
int main()
{
  example();
  return 0;
}

